public class PeakValue {
    public static void main(String[] args) {

        int arr[]={1,2,5,4,9,7,8,0};
        int peak=findPeakElement(arr);
        System.out.println(arr[peak]);
    }

    //关于二分搜索的寻值问题
    public static int findPeakElement(int[] arr) {
        if(arr.length==1) {  //如果数组只有一个数则这个值就是峰值点
            return 0;
        }
        if(arr[0]>arr[1]) {  //验证最左边的点是否为峰值点
            return 0;
        }
        if(arr[arr.length-1] > arr[arr.length-2]) { //验证最右的点是否为峰值点
            return arr.length-1;
        }

        int L=0,R=arr.length-1,mid=0,ans=-1;

        while(L<=R) {
            mid=L+((R-L)>>1);
            if(arr[mid-1] > arr[mid]) {  //左边的数比中点大，左半部分必有峰值点
                R=mid-1;
            }
            else if(arr[mid+1] > arr[mid] ) {  //右边的数比中点大，右半部分必有峰值点
                L=mid+1;
            }
            else{
                ans = mid;
                break;
            }
        }
        return ans;
    }
}
